
package com.hlkj.pay.app.merchant.ext.impl.gtzfpay.handler;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.framework.common.util.json.JsonUtils;
import com.hlkj.pay.app.merchant.ext.impl.easypay.dto.EasypayAppChannelParams;
import com.hlkj.pay.app.merchant.ext.impl.gtzfpay.constant.GtzfPayConstant;
import com.hlkj.pay.app.merchant.ext.impl.gtzfpay.dto.GtzfPayConfig;
import com.hlkj.pay.common.PayResultCode;
import com.hlkj.pay.infrastructure.model.merchant.MerchantAppChannelDO;
import com.hlkj.pay.infrastructure.model.pay.ProviderChannelConfigDO;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.core.utils.BeanUtil;
import net.dreamlu.mica.core.utils.StringPool;
import org.springframework.util.StringUtils;

import java.util.Map;
import java.util.Set;

/**
 * 易生 商户进件参数处理
 * 
 * @author HlpayTeam
 * @date 2024/09/26 12:02
 */
@Slf4j
public class GtzfPayMerchantCommonParamsHandle {

   public CommonResult<GtzfPayConfig> channelConfig(ProviderChannelConfigDO providerChannelConfigDO) {
        // 移除config 不需要的 属性
        String channelConfig = providerChannelConfigDO.getParamsConfig();
        Map<String, String> paramsConfigValue = JsonUtils.parseObject(channelConfig, Map.class);
       GtzfPayConfig bean = new GtzfPayConfig();
        Map<String, Object> objectMap = BeanUtil.toMap(bean);
        Set<String> keys = objectMap.keySet();
        // 使用 keySet() 过滤 Map
        paramsConfigValue.keySet().removeIf(key -> !keys.contains(key));
        channelConfig = JsonUtils.toJsonString(paramsConfigValue);
        providerChannelConfigDO.setParamsConfig(channelConfig);
        // 配置转换
        try {
            GtzfPayConfig config = JsonUtils.parseObject(channelConfig, GtzfPayConfig.class);
            if (!StringUtils.hasText(config.getAgetId())) {
                return CommonResult.error(PayResultCode.PAY_CHANNEL_CONFIG_ERROR.getCode(), "国通支付参数配置格式错误,机构号 为空");
            }
            if (!StringUtils.hasText(config.getMchPublicKey())) {
                return CommonResult.error(PayResultCode.PAY_CHANNEL_CONFIG_ERROR.getCode(), "国通支付参数配置格式错误,商户公钥 为空");
            }
            return CommonResult.success(config);
        } catch (Exception e) {
            return CommonResult.error(PayResultCode.PAY_CHANNEL_CONFIG_ERROR.getCode(), "国通支付参数配置格式错误请求失败,失败信息" + e.getMessage());
        }
    }

    public static String date(String date) {
        if (!StringUtils.hasText(date)) {
            return null;
        }
        return date.replace(StringPool.DASH, StringPool.EMPTY);
    }

    public static String domain(boolean test) {
        if (test) {
            return GtzfPayConstant.DOMAIN_TEST;
        } else {
            return GtzfPayConstant.DOMAIN_PRO;
        }
    }

    public static String getCerType(String type) {
//        1:身份证
//        2:护照
//        3:军官证
//        4:士兵证
//        5:回乡证
//        6:户口本
//        7:外国护照
//        8:其他
//        9:暂住证
//        10:警官证
//        11:文职干部证
//        12:港澳台同胞通行证
//        13:外国人居留证
//        14:台胞证
//        15:港澳台居住证

        // 01 身份证
        // 02 军官证
        // 03 护照
        // 04 户口簿
        // 05 士兵证
        // 06 港澳来往内地通行证
        // 07 台湾同胞来往内地通行证
        // 08 临时身份证
        // 09 外国人居留证
        // 10 警官证
        // 11 营业执照
        // 12 组织机构代码证
        // 13 税务登记证
        // 14 统一社会信用代码证
        // 15 单位证明
        // 16 事业单位法人正式
        // 17 民办非企业单位登记证书
        // 18 基金会法人登记证书
        // 19 社会团体登记证书
        // 99 其它
        switch (type) {
            case "1":
                return "01";
            case "2":
                return "03";
            case "3":
                return "02";
            case "4":
                return "05";
            case "6":
                return "04";
            case "7":
                return "03";
            case "8":
                return "99";
            case "10":
                return "10";
            case "12":
                return "06";
            case "13":
                return "09";
            case "14":
                return "07";
            case "15":
                return "06";
        }
        return null;
    }

    public static boolean file(String fileUrl) {
        if (!StringUtils.hasText(fileUrl)) {
            return false;
        }
        int indexOf = fileUrl.lastIndexOf(StringPool.SLASH);
        if (indexOf < 0) {
            return false;
        }
        String fileType = fileUrl.substring(indexOf);
        if (!fileType.contains(StringPool.DOT)) {
            return false;
        }
        return true;
    }
    public EasypayAppChannelParams easyPayAppChannelParams(MerchantAppChannelDO merchantAppChannelDO) {
        return JsonUtils.parseObject(merchantAppChannelDO.getAppConfigJson(), EasypayAppChannelParams.class);
    }
}
